/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * ABMUsuario.java
 *
 * Created on 16/11/2011, 01:11:55 AM
 */
package Interface;

import Dominio.Controladora;
import Dominio.Usuario;
import javax.swing.JOptionPane;

/**
 *
 * @author Agustin
 */
public class ABMUsuario extends javax.swing.JFrame {

    private static ABMUsuario instance;

    public static ABMUsuario getInstance() {
        if (instance == null) {
            instance = new ABMUsuario();
        }
        instance.limpiar();
        return instance;
    }

    /** Creates new form ABMUsuario */
    public ABMUsuario() {
        initComponents();
        ModeloComboEspecialidades m = new ModeloComboEspecialidades();
        cmbEspecialidad.setModel(m);
        this.setLocationRelativeTo(null);
        limpiar();

    }

    public String[] contraseñas() {
        String[] contraseñas = new String[2];
        try {
            if (txtContraseña.getPassword() != null && txtReContraseña.getPassword() != null) {
                contraseñas[0] = "";
                contraseñas[1] = "";
                for (int i = 0; i < txtContraseña.getPassword().length; i++) {
                    contraseñas[0] = contraseñas[0] + txtContraseña.getPassword()[i];
                }
                for (int x = 0; x < txtReContraseña.getPassword().length; x++) {
                    contraseñas[1] = contraseñas[1] + txtReContraseña.getPassword()[x];
                }
            } else {
                throw new Exception("Los campos de Contraaseña no puede ser vacios");
            }
        } catch (Exception e) {
            throw new UnsupportedOperationException(e.toString());
        }


        return contraseñas;
    }

    public void limpiar() {
        btnAgregarUsuario.setEnabled(false);
        btnBaja.setEnabled(false);
        btnCalificaciones.setEnabled(false);
        btnContactos.setEnabled(false);
        btnDejarEmpresa.setEnabled(false);
        btnModifcar.setEnabled(false);
        txtContraseña.setText("");
        txtNombre.setText("");
        txtNombreUsuario.setText("");
        txtReContraseña.setText("");
        txtExperienciaExtra.setText("");
        cmbEspecialidad.setSelectedItem(null);
        txtNombreUsuario.setEnabled(true);
        lblVExpe.setText("----");

    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        lblNombreUsuario = new javax.swing.JLabel();
        lblContraseña = new javax.swing.JLabel();
        lblReContraseña = new javax.swing.JLabel();
        lblNombre = new javax.swing.JLabel();
        lblEspecialidad = new javax.swing.JLabel();
        lblExperiencia = new javax.swing.JLabel();
        txtNombreUsuario = new javax.swing.JTextField();
        txtNombre = new javax.swing.JTextField();
        txtExperienciaExtra = new javax.swing.JTextField();
        cmbEspecialidad = new javax.swing.JComboBox();
        txtContraseña = new javax.swing.JPasswordField();
        txtReContraseña = new javax.swing.JPasswordField();
        btnAgregarUsuario = new javax.swing.JButton();
        btnBaja = new javax.swing.JButton();
        btnModifcar = new javax.swing.JButton();
        btnContactos = new javax.swing.JButton();
        btnCalificaciones = new javax.swing.JButton();
        btnDejarEmpresa = new javax.swing.JButton();
        btnLimpiar = new javax.swing.JButton();
        lblAMBUsuario = new javax.swing.JLabel();
        lblNombreUsuario4 = new javax.swing.JLabel();
        lblNombreUsuario5 = new javax.swing.JLabel();
        lblNombreUsuario6 = new javax.swing.JLabel();
        lblNombreUsuario7 = new javax.swing.JLabel();
        lblExperienciaExtra = new javax.swing.JLabel();
        lblVExpe = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setBackground(new java.awt.Color(153, 204, 255));

        lblNombreUsuario.setText("Nombre de Usuario");

        lblContraseña.setText("Contraseña");

        lblReContraseña.setText("ReContraseña");

        lblNombre.setText("Nombre");

        lblEspecialidad.setText("Especialidad");

        lblExperiencia.setText("Experiencia");

        txtNombre.setSelectionStart(3);

        txtExperienciaExtra.setSelectionStart(5);

        txtContraseña.setSelectionStart(1);

        txtReContraseña.setSelectionStart(2);
        txtReContraseña.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusLost(java.awt.event.FocusEvent evt) {
                txtReContraseñaFocusLost(evt);
            }
        });

        btnAgregarUsuario.setText("+");
        btnAgregarUsuario.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAgregarUsuarioActionPerformed(evt);
            }
        });

        btnBaja.setText("-");
        btnBaja.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnBajaActionPerformed(evt);
            }
        });

        btnModifcar.setText("*");
        btnModifcar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnModifcarActionPerformed(evt);
            }
        });

        btnContactos.setText("Contactos");
        btnContactos.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnContactosActionPerformed(evt);
            }
        });

        btnCalificaciones.setText("Calificaciones");
        btnCalificaciones.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnCalificacionesActionPerformed(evt);
            }
        });

        btnDejarEmpresa.setText("Dejar Empresa");
        btnDejarEmpresa.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnDejarEmpresaActionPerformed(evt);
            }
        });

        btnLimpiar.setText("Limpiar");
        btnLimpiar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnLimpiarActionPerformed(evt);
            }
        });

        lblAMBUsuario.setFont(new java.awt.Font("Monospaced", 0, 24));
        lblAMBUsuario.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblAMBUsuario.setText("ABM Usuario");

        lblNombreUsuario4.setText("*");

        lblNombreUsuario5.setText("*");

        lblNombreUsuario6.setText("*");

        lblNombreUsuario7.setText("*");

        lblExperienciaExtra.setText("Experiencia Extra");

        lblVExpe.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        lblVExpe.setText("xxxxx");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(lblExperiencia)
                            .addComponent(lblEspecialidad)
                            .addComponent(lblNombre)
                            .addComponent(lblReContraseña)
                            .addComponent(lblContraseña)
                            .addComponent(lblNombreUsuario)
                            .addComponent(lblExperienciaExtra))
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGap(18, 18, 18)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(txtReContraseña, javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(txtContraseña, javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(txtNombreUsuario, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 130, Short.MAX_VALUE)))
                            .addGroup(layout.createSequentialGroup()
                                .addGap(18, 18, 18)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                    .addComponent(txtNombre, javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(cmbEspecialidad, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                    .addComponent(txtExperienciaExtra, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 129, Short.MAX_VALUE)
                                    .addComponent(lblVExpe, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 10, Short.MAX_VALUE)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(lblNombreUsuario4, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 20, Short.MAX_VALUE)
                            .addComponent(lblNombreUsuario5, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 20, Short.MAX_VALUE)
                            .addComponent(lblNombreUsuario6, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 20, Short.MAX_VALUE)
                            .addComponent(lblNombreUsuario7, javax.swing.GroupLayout.DEFAULT_SIZE, 20, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(btnModifcar, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnContactos, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnCalificaciones, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnBaja, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(btnAgregarUsuario, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE)
                            .addComponent(btnDejarEmpresa, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))
                    .addComponent(lblAMBUsuario, javax.swing.GroupLayout.DEFAULT_SIZE, 376, Short.MAX_VALUE)
                    .addComponent(btnLimpiar))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblAMBUsuario)
                .addGap(32, 32, 32)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblNombreUsuario)
                    .addComponent(txtNombreUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnAgregarUsuario)
                    .addComponent(lblNombreUsuario7))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblContraseña)
                    .addComponent(txtContraseña, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnBaja)
                    .addComponent(lblNombreUsuario6))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblReContraseña)
                    .addComponent(txtReContraseña, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnModifcar)
                    .addComponent(lblNombreUsuario5))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblNombre)
                    .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnContactos))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(lblEspecialidad)
                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                        .addComponent(cmbEspecialidad, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(btnCalificaciones)
                        .addComponent(lblNombreUsuario4)))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblExperiencia)
                    .addComponent(btnDejarEmpresa)
                    .addComponent(lblVExpe))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtExperienciaExtra, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblExperienciaExtra))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 29, Short.MAX_VALUE)
                .addComponent(btnLimpiar)
                .addGap(22, 22, 22))
        );

        pack();
    }// </editor-fold>//GEN-END:initComponents

    private void btnLimpiarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnLimpiarActionPerformed
        limpiar();
    }//GEN-LAST:event_btnLimpiarActionPerformed

    private void txtReContraseñaFocusLost(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_txtReContraseñaFocusLost
        try {
            if (!txtNombreUsuario.getText().equals("")) {
                String contraseña = contraseñas()[0];
                String recontraseña = contraseñas()[1];
                if (contraseña.equals(recontraseña)) {
                    Usuario u = new Usuario();
                    u = Controladora.getInstance().traerUsuarios(txtNombreUsuario.getText()).get(0);
                    if (u.getNombre() != null && contraseña.equals(u.getContraseña())) {
                        txtNombreUsuario.setEnabled(false);
                        txtNombre.setText(u.getNombre());
                        cmbEspecialidad.setSelectedItem(u.getEspecialidad().getNombre());
                        txtExperienciaExtra.setText(u.getExperienciaEx() + "");
                        lblVExpe.setText(u.getExperiencia() + "");
                        btnBaja.setEnabled(true);
                        btnModifcar.setEnabled(true);
                        btnContactos.setEnabled(true);
                        btnDejarEmpresa.setEnabled(true);
                        btnCalificaciones.setEnabled(true);
                        Controladora.getInstance().setUsuario(u);
                    } else if (u.getNombre() != null && txtNombreUsuario.getText().equals(u.getNombre_usuario()) && txtNombreUsuario.isEnabled()) {
                        throw new Exception("El Usuario Existe, la Contraseña no es Correcta ");
                    } else {
                        btnAgregarUsuario.setEnabled(true);
                    }
                } else {
                    throw new Exception("Las Contraseñas no Coinciden.");
                }
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, Controladora.getInstance().limpiarE(e), "Atencion", JOptionPane.ERROR_MESSAGE);
        }

    }//GEN-LAST:event_txtReContraseñaFocusLost

    private void btnModifcarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModifcarActionPerformed
        String contraseña = contraseñas()[0];
        String recontraseña = contraseñas()[1];
        try {
            if (!contraseña.equals("") && !recontraseña.equals("") && !txtNombre.getText().equals("") && !cmbEspecialidad.getSelectedItem().toString().equals("") && !txtExperienciaExtra.getText().equals("")) {
                if (contraseña.equals(recontraseña)) {
                    Controladora.getInstance().modificarUsuario(txtNombreUsuario.getText(), contraseña, lblVExpe.getText(), txtExperienciaExtra.getText(), txtNombre.getText(), cmbEspecialidad.getSelectedItem().toString());
                    JOptionPane.showMessageDialog(this, "Modificacion Satisfactoria", "Listo", JOptionPane.INFORMATION_MESSAGE);
                    limpiar();
                } else {
                    JOptionPane.showMessageDialog(this, "Las Contraseñas no Coinciden", "Atencion", JOptionPane.ERROR_MESSAGE);
                }
            } else {
                JOptionPane.showMessageDialog(this, "No Puede dejar Campos sin Completar ", "Atencion", JOptionPane.ERROR_MESSAGE);
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, Controladora.getInstance().limpiarE(e), "Atencion", JOptionPane.ERROR_MESSAGE);
        }

    }//GEN-LAST:event_btnModifcarActionPerformed

    private void btnAgregarUsuarioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAgregarUsuarioActionPerformed
        String contraseña = contraseñas()[0];
        String recontraseña = contraseñas()[1];
        try {
            if (cmbEspecialidad.getSelectedItem() != null) {
                if (contraseña.equals(recontraseña)) {
                    Controladora.getInstance().crearUsuario(txtNombreUsuario.getText(), contraseña, txtExperienciaExtra.getText(), txtNombre.getText(), cmbEspecialidad.getSelectedItem().toString());
                    JOptionPane.showMessageDialog(this, "Acreditacion Satisfactoria", "Listo", JOptionPane.INFORMATION_MESSAGE);
                    limpiar();
                } else {
                    throw new Exception("Las contraseñas no coinciden.");
                }
            } else {
                throw new Exception("Debe seleccionar una Especialidad.");
            }
        } catch (Exception e) {

            JOptionPane.showMessageDialog(this, Controladora.getInstance().limpiarE(e), "Atencion", JOptionPane.ERROR_MESSAGE);
        }

    }//GEN-LAST:event_btnAgregarUsuarioActionPerformed

    private void btnBajaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnBajaActionPerformed
        String contraseña = contraseñas()[0];
        String recontraseña = contraseñas()[1];
        try {
            if (contraseña.equals(recontraseña)) {
                Usuario u = new Usuario();
                u = Controladora.getInstance().traerUsuarios(txtNombreUsuario.getText()).get(0);
                if (u.getNombre() != null) {
                    Controladora.getInstance().bajaUsuario(txtNombreUsuario.getText(), contraseña);
                    JOptionPane.showMessageDialog(this, "Baja satisfactoria.", "Listo", JOptionPane.INFORMATION_MESSAGE);
                    limpiar();
                } else {
                    btnAgregarUsuario.setEnabled(true);
                }
            } else {
                throw new Exception("Las Contraseñas no Coinciden, no Puede Borrar el Usuario.");
            }
        } catch (Exception e) {
            JOptionPane.showMessageDialog(this, Controladora.getInstance().limpiarE(e), "Atencion", JOptionPane.ERROR_MESSAGE);
        }

    }//GEN-LAST:event_btnBajaActionPerformed

    private void btnContactosActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnContactosActionPerformed
        Contactos.getInstance().setVisible(true);
    }//GEN-LAST:event_btnContactosActionPerformed

    private void btnCalificacionesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnCalificacionesActionPerformed
        Calificaciones.getInstance().setVisible(true);
    }//GEN-LAST:event_btnCalificacionesActionPerformed

    private void btnDejarEmpresaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDejarEmpresaActionPerformed
        DejarEmpresa.getInstance().setVisible(true);
    }//GEN-LAST:event_btnDejarEmpresaActionPerformed

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new ABMUsuario().setVisible(true);


            }
        });


    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAgregarUsuario;
    private javax.swing.JButton btnBaja;
    private javax.swing.JButton btnCalificaciones;
    private javax.swing.JButton btnContactos;
    private javax.swing.JButton btnDejarEmpresa;
    private javax.swing.JButton btnLimpiar;
    private javax.swing.JButton btnModifcar;
    private javax.swing.JComboBox cmbEspecialidad;
    private javax.swing.JLabel lblAMBUsuario;
    private javax.swing.JLabel lblContraseña;
    private javax.swing.JLabel lblEspecialidad;
    private javax.swing.JLabel lblExperiencia;
    private javax.swing.JLabel lblExperienciaExtra;
    private javax.swing.JLabel lblNombre;
    private javax.swing.JLabel lblNombreUsuario;
    private javax.swing.JLabel lblNombreUsuario4;
    private javax.swing.JLabel lblNombreUsuario5;
    private javax.swing.JLabel lblNombreUsuario6;
    private javax.swing.JLabel lblNombreUsuario7;
    private javax.swing.JLabel lblReContraseña;
    private javax.swing.JLabel lblVExpe;
    private javax.swing.JPasswordField txtContraseña;
    private javax.swing.JTextField txtExperienciaExtra;
    private javax.swing.JTextField txtNombre;
    private javax.swing.JTextField txtNombreUsuario;
    private javax.swing.JPasswordField txtReContraseña;
    // End of variables declaration//GEN-END:variables
}
